# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Compute.V1.Model.InstanceSettings do
  @moduledoc """
  Represents a Instance Settings resource. You can use instance settings to configure default settings for Compute Engine VM instances. For example, you can use it to configure default machine type of Compute Engine VM instances.

  ## Attributes

  *   `fingerprint` (*type:* `String.t`, *default:* `nil`) - Specifies a fingerprint for instance settings, which is essentially a hash of the instance settings resource's contents and used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update the instance settings resource. You must always provide an up-to-date fingerprint hash in order to update or change the resource, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve the resource.
  *   `kind` (*type:* `String.t`, *default:* `compute#instanceSettings`) - [Output Only] Type of the resource. Always compute#instance_settings for instance settings.
  *   `metadata` (*type:* `GoogleApi.Compute.V1.Model.InstanceSettingsMetadata.t`, *default:* `nil`) - The metadata key/value pairs assigned to all the instances in the corresponding scope.
  *   `zone` (*type:* `String.t`, *default:* `nil`) - [Output Only] URL of the zone where the resource resides You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :fingerprint => String.t() | nil,
          :kind => String.t() | nil,
          :metadata => GoogleApi.Compute.V1.Model.InstanceSettingsMetadata.t() | nil,
          :zone => String.t() | nil
        }

  field(:fingerprint)
  field(:kind)
  field(:metadata, as: GoogleApi.Compute.V1.Model.InstanceSettingsMetadata)
  field(:zone)
end

defimpl Poison.Decoder, for: GoogleApi.Compute.V1.Model.InstanceSettings do
  def decode(value, options) do
    GoogleApi.Compute.V1.Model.InstanceSettings.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Compute.V1.Model.InstanceSettings do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
